home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
EnigmA Amiga Run 1996 June
/
EnigmA AMIGA RUN 08 (1996)(G.R. Edizioni)(IT)[!][issue 1996-06][EARSAN CD VII].iso
/
earcd
/
utilsys
/
rss14gmd.lha
/
RSys_1.4gmd
/
C
/
main.c
< prev
next >
Wrap
C/C++ Source or Header
|
1996-05-04
|
8KB
|
403 lines
/**
***************************************************************************
*
* Datei:
* RSysMain.c
*
* Inhalt:
*
* --- Globale Routinen ---
*
* void _icon_parse ( char *progname );
* void _main ( long alen , char *aptr );
* void _wb_parse ( void );
*
* --- Lokale Routinen ---
*
*
* Bemerkungen:
* Startup-Routinen von RSys; ruft das Hauptprogramm auf.
*
* Erstellungsdatum:
* 07-Jul-93 Rolf Böhme
*
* Änderungen:
* 07-Jul-93 Rolf Böhme Erstellung
*
***************************************************************************
**/
#include "RSys.h"
#include "protos.h"
//extern int Enable_Abort;
#define QUOTE '"'
#define ESCAPE '*'
#define NL '\n'
extern char __stdiowin[];
extern char __stdiov37[];
static int argc; /* arg count */
static char **targv, **argv; /* arg pointers */
extern char _dir[], _file[];
static DISKOBJECT *dop;
/*
*********************
*/
static char *
ToolType (char *type)
{
return (char *) FindToolType ((UBYTE **) dop->do_ToolTypes,
(UBYTE *) (type));
}
/*
*********************
*/
void
_icon_parse (char *progname)
{
char *cp;
if (IconBase = OpenLibrary ((UBYTE *) "icon.library", 0L))
{
if (dop = GetDiskObject ((UBYTE *) progname))
{
if (cp = ToolType ("CX_HOTKEY"))
strcpy (&hotkey[0][0], cp);
if (cp = ToolType ("CX_CRYPT"))
strcpy (&hotkey[1][0], cp);
if (cp = ToolType ("CX_FINDFILE"))
strcpy (&hotkey[2][0], cp);
if (cp = ToolType ("CX_FORMAT"))
strcpy (&hotkey[3][0], cp);
if (cp = ToolType ("CX_HUNKLIST"))
strcpy (&hotkey[4][0], cp);
if (cp = ToolType ("CX_CRC"))
strcpy (&hotkey[5][0], cp);
if (cp = ToolType ("CX_SAVEWINDOW"))
strcpy (&hotkey[6][0], cp);
if (cp = ToolType ("CX_FILEREQUEST"))
strcpy (&hotkey[7][0], cp);
if (cp = ToolType ("NOFASTMODE"))
Flags.fastmode = 0;
if (cp = ToolType ("NOSORT"))
Flags.sortmode = 0;
if (cp = ToolType ("WORKINGBAR"))
Flags.workingbar = 1;
if (cp = ToolType ("AUTOFRONT"))
Flags.autofront = 1;
if (cp = ToolType ("MOUSEWINDOW"))
Flags.mousewindow = 1;
if (cp = ToolType ("TOPAZFONT"))
Flags.sysfont = 1;
if (cp = ToolType ("NOSAVEASKING"))
Flags.saveasking = 0;
if (cp = ToolType ("TEXTFORMATTER"))
Flags.textformat = 1;
if (cp = ToolType ("NOAPPICON"))
Flags.appicon = 0;
if (cp = ToolType ("BACKPATTERNCOL"))
bpc = atoi (cp);
if (cp = ToolType ("BACKGROUNDCOL"))
bgc = atoi (cp);
if (cp = ToolType ("BACKPATTERN"))
bpp = ahtoi (cp);
if (cp = ToolType ("DETAILPEN"))
winddetail = atoi (cp);
if (cp = ToolType ("BLOCKPEN"))
windblock = atoi (cp);
if (cp = ToolType ("MENUPEN"))
menudetail = atoi (cp);
if (cp = ToolType ("HARDWAREDATA"))
strcpy ((char *) RSysFiles.Hardware, cp);
if (cp = ToolType ("LIBOFFDATA"))
strcpy ((char *) RSysFiles.LibOffsets, cp);
if (cp = ToolType ("AGUIDEDOC"))
strcpy ((char *) RSysFiles.Guide, cp);
if (cp = ToolType ("AGUIDECONTEXT"))
strcpy ((char *) RSysFiles.GuideContext, cp);
if (cp = ToolType ("ACTIONFILE"))
strcpy ((char *) RSysFiles.ActionFile, cp);
if (cp = ToolType ("ICONX"))
iconx = atoi (cp);
if (cp = ToolType ("ICONY"))
icony = atoi (cp);
if (cp = ToolType ("OUTWINDOW"))
strcpy ((char *) autocon, cp);
else
strcpy ((char *) autocon, "CON:/40//150/Sys - Window/auto/close");
if (cp = ToolType ("LISTHEIGHT"))
{
listviewheight = atoi (cp);
if (listviewheight == -1)
listviewheight = 1000;
else if (listviewheight < 2)
listviewheight = 10;
SysHeight += (listviewheight - 10) * 8;
}
FreeDiskObject (dop);
}
CloseLibrary (IconBase);
IconBase = NULL;
}
}
/*
* __ main from SAS example (thanks SASSY folks :)
*/
void __stdargs
__main (char *line)
{
char *argbuf;
int i;
/***
* First count the number of arguments
***/
argbuf = line;
for (argc = 0;; argc++)
{
while (isspace (*line))
line++;
if (*line == '\0')
break;
if (*line == QUOTE)
{
line++;
while (*line != QUOTE && *line != 0)
{
if (*line == ESCAPE)
{
line++;
if (*line == 0)
break;
}
line++;
}
if (*line)
line++;
}
else
/* non-quoted arg */
{
while ((*line != '\0') && (!isspace (*line)))
line++;
if (*line == '\0')
break;
}
}
if (argc)
{
argv = AllocMem ((argc + 1) * sizeof (char *), MEMF_CLEAR);
if (argv == NULL)
exit (20);
/***
* Build argument pointer list
***/
i = 0;
line = argbuf;
while (1)
{
while (isspace (*line))
line++;
if (*line == '\0')
break;
if (*line == QUOTE)
{
argbuf = argv[i++] = ++line; /* ptr inside quoted string */
while (*line != QUOTE && *line != 0)
{
if (*line == ESCAPE)
{
line++;
switch (*line)
{
case '\0':
*argbuf = 0;
goto linedone;
case 'E':
*argbuf++ = ESC;
break;
case 'N':
*argbuf++ = NL;
break;
default:
*argbuf++ = *line;
}
line++;
}
else
{
*argbuf++ = *line++;
}
}
if (*line)
line++;
*argbuf++ = '\0'; /* terminate arg */
}
else
/* non-quoted arg */
{
argv[i++] = line;
while ((*line != '\0') && (!isspace (*line)))
line++;
if (*line == '\0')
break;
else
*line++ = '\0'; /* terminate arg */
}
} /* while */
}
linedone:
targv = (argc == 0) ? (char **) _WBenchMsg : (char **) &argv[0];
/***
* Call user's main program
***/
was_main (argc, targv); /* call main function */
exit (0);
}
/*
*********************
*/
void
MEMCLEANUP_DESTRUCTOR (argcleanup)
{
if (argc && argv)
FreeMem (argv, (argc + 1) * sizeof (char *));
}
/*
*********************
*/
void
was_main (long alen, char **aptr)
{
PROCESS *pp;
SysBase = *(EXECBASE **) 4;
if (SysBase->LibNode.lib_Version < 36)
{
if (alen)
Write (Output (), (UBYTE *) "WB 2.0 ONLY!\n", 13);
exit (0);
}
if (DOSBase = (DOSLIBRARY *) OpenLibrary ((STRPTR) "dos.library", 36L))
{
LastID = SYSTEMINFO;
pp = (PROCESS *) FindTask (0L);
strcpy (hotkey[0], "lshift rshift y");
strcpy (hotkey[1], "lshift rshift k");
strcpy (hotkey[2], "lshift rshift s");
strcpy (hotkey[3], "lshift rshift f");
strcpy (hotkey[4], "lshift rshift h");
strcpy (hotkey[5], "lshift rshift c");
strcpy (hotkey[6], "lshift rshift w");
strcpy (hotkey[7], "lshift rshift esc");
if (pp->pr_CLI)
{
RSysName = AllocVec (MAXFULLNAME, MEMF_CLEAR);
if (RSysName)
{
NameFromLock (GetProgramDir (), (UBYTE *) RSysName, MAXFULLNAME);
strcpy (_dir, RSysName);
strcpy (_file, (char *) FilePart ((UBYTE *) argv[0]));
AddPart ((UBYTE *) RSysName, FilePart ((UBYTE *) argv[0]), MAXFULLNAME);
}
//Enable_Abort = 1;
}
else
{
WaitPort (&pp->pr_MsgPort);
WBenchMsg = (WBSTARTUP *) GetMsg (&pp->pr_MsgPort);
if (WBenchMsg->sm_ArgList)
{
NameFromLock (WBenchMsg->sm_ArgList->wa_Lock, (UBYTE *) _dir, MAXFULLNAME);
strcpy (_file, (char *) FilePart ((UBYTE *) WBenchMsg->sm_ArgList->wa_Name));
RSysName = AllocVec (strlen (WBenchMsg->sm_ArgList->wa_Name) + 1, MEMF_CLEAR);
if (RSysName)
strcpy (RSysName, WBenchMsg->sm_ArgList->wa_Name);
CurrentDir (WBenchMsg->sm_ArgList->wa_Lock);
}
argv = (char **) WBenchMsg;
}
if (RSysName)
_icon_parse (RSysName);
main (argc, argv);
}
}